package app.controllers;

import app.models.Especialidade;
import app.services.CHService;
import app.services.EspecialidadeService;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;

@Resource
public class EspecialidadeController {

	private final Result result;
	private final EspecialidadeService service;
	private final CHService chService;
	private final Validator validator;
	
	
	public EspecialidadeController(Result result,
	Validator validator, EspecialidadeService service, CHService chService) {
		
		this.result = result;
		this.service = service;
		this.chService = chService;
		this.validator = validator;
	}
	
	@Get("/especialidades")
	public void index() {
		this.result.include("especialidades", service.findAll());
		this.result.include("ultimasEspecialidades", service.findLastEspecialidades());
	}
	
	@Get("/especialidades/new")
	public void form() { }
	
	@Get("/especialidades/find")
	public void index(String filter) {
		this.result.include("filter", filter);
		this.result.include("especialidades", service.findByFilter(filter));
		
		this.result.of(this).table();
	}
	
	@Post("/especialidades/save")
	public void save(Especialidade especialidade) {
		for(Especialidade e : service.findAll()){
			if(e.getNome().equals(especialidade.getNome()) && e.getId() != especialidade.getId() ){
				validator.add(new ValidationMessage("Especialidade já cadastrado", "erro"));
			}
		}
		
		validator.validate(especialidade);
		
		validator.onErrorRedirectTo(this).form();
		service.create(especialidade);
		
		this.result.redirectTo(this).index();
	}
	
	@Get("/especialidades/{id}/edit")
	public void edit(Long id) {
		this.result.include("especialidade", service.find(id));
	}
	
	@Post("/especialidades/update")
	public void update(Especialidade especialidade) {
		for(Especialidade e : service.findAll()){
			if(e.getNome().equals(especialidade.getNome()) && e.getId() != especialidade.getId() ){
				validator.add(new ValidationMessage("Especialidade já cadastrado", "erro"));
			}
		}
		
		validator.validate(especialidade);
		
		validator.onErrorRedirectTo(this).edit(especialidade.getId());
		service.update(especialidade);
		
		this.result.redirectTo(this).index();
	}
	
	public void table() {}
}